/**
 * 课程教学总结相关接口封装
 * 
 * 包含的功能接口：
 * 1. 基础CRUD操作
 *    - 获取总结列表
 *    - 创建新总结
 *    - 更新总结
 *    - 删除总结
 * 
 * 2. 业务功能接口
 *    - 获取个人总结列表
 *    - 获取待审核总结
 *    - 提交总结
 *    - 教研室审核
 *    - 部系审核
 *    - 获取审核历史
 * 
 * 3. 数据结构说明
 *    总结对象结构：{
 *      id: Number,            // 总结ID
 *      termId: Number,        // 学期ID
 *      courseId: Number,      // 课程ID
 *      teacherId: Number,     // 教师ID
 *      courseName: String,    // 课程名称
 *      teacherName: String,   // 教师姓名
 *      termName: String,      // 学期名称
 *      status: Number,        // 状态
 *      createDate: Date       // 创建时间
 *    }
 * 
 * 4. 错误处理
 *    所有请求统一由request.js处理错误情况
 *    包括：未授权(401)、禁止访问(403)、服务器错误(500)等
 */
import request from './request'

/**
 * 获取所有课程教学总结（分页）
 * 
 * @param {Object} params 分页参数 {page, size}
 * @returns {Promise} 返回包含分页教学总结的Promise对象
 * @throws {Error} 当请求失败时抛出错误
 * 
 * @example
 * // 使用示例
 * getAllKcjxzj({page: 0, size: 20})
 *   .then(response => {
 *     const summaryPage = response.data;
 *     // 处理分页总结列表
 *   })
 *   .catch(error => {
 *     // 处理错误
 *   });
 */
export function getAllKcjxzj(params = {}) {
  return request({
    url: '/api/kcjxzj',
    method: 'get',
    params
  })
}

/**
 * 获取所有课程教学总结（列表形式，用于下拉选择等场景）
 * 
 * @returns {Promise} 返回包含所有教学总结的Promise对象
 * @throws {Error} 当请求失败时抛出错误
 */
export function getAllKcjxzjList() {
  return request({
    url: '/api/kcjxzj/list',
    method: 'get'
  })
}

/**
 * 获取当前登录教师的课程教学总结列表
 * 
 * @returns {Promise} 返回包含当前教师教学总结的Promise对象
 * @throws {Error} 当用户未登录或请求失败时抛出错误
 * 
 * @example
 * // 使用示例
 * getMyKcjxzj()
 *   .then(response => {
 *     const mySummaryList = response.data;
 *     // 处理教师的总结列表
 *   })
 *   .catch(error => {
 *     // 处理错误，可能需要跳转到登录页
 *   });
 */
export function getMyKcjxzj() {
  return request({
    url: '/api/kcjxzj/my',
    method: 'get'
  })
}

// 获取当前用户待审核的课程教学总结
export function getPendingAuditKcjxzj() {
  return request({
    url: '/api/kcjxzj/pending-audit',
    method: 'get'
  })
}

// 根据ID获取课程教学总结
export function getKcjxzjById(id) {
  return request({
    url: `/api/kcjxzj/${id}`,
    method: 'get'
  })
}

// 根据教师ID获取课程教学总结
export function getKcjxzjByTeacherId(teacherId) {
  return request({
    url: `/api/kcjxzj/teacher/${teacherId}`,
    method: 'get'
  })
}

// 创建课程教学总结
export function createKcjxzj(data) {
  return request({
    url: '/api/kcjxzj',
    method: 'post',
    data
  })
}

// 更新课程教学总结
export function updateKcjxzj(id, data) {
  return request({
    url: `/api/kcjxzj/${id}`,
    method: 'put',
    data
  })
}

// 删除课程教学总结
export function deleteKcjxzj(id) {
  return request({
    url: `/api/kcjxzj/${id}`,
    method: 'delete'
  })
}

// 提交课程教学总结
export function submitKcjxzj(id) {
  return request({
    url: `/api/kcjxzj/${id}/submit`,
    method: 'post'
  })
}

// 教研室审核
export function auditByResearch(id, data) {
  return request({
    url: `/api/kcjxzj/${id}/audit/research`,
    method: 'post',
    data
  })
}

// 部系审核
export function auditByDepartment(id, data) {
  return request({
    url: `/api/kcjxzj/${id}/audit/department`,
    method: 'post',
    data
  })
}

// 获取审核历史
export function getAuditHistory(id) {
  return request({
    url: `/api/kcjxzj/${id}/audit-history`,
    method: 'get'
  })
}

// 获取最新审核记录
export function getLatestAudit(id) {
  return request({
    url: `/api/kcjxzj/${id}/latest-audit`,
    method: 'get'
  })
}

// 获取特定级别的最新审核记录
export function getLatestAuditByLevel(id, level) {
  return request({
    url: `/api/kcjxzj/${id}/latest-audit/${level}`,
    method: 'get'
  })
}

/**
 * 根据教学任务ID获取关联的课程教学总结
 * @param {number} teachingMissionId 教学任务ID
 * @returns {Promise} 返回课程教学总结信息，若未关联则返回null
 */
export function getKcjxzjByTeachingMissionId(teachingMissionId) {
  return request({
    url: `/api/kcjxzj/teaching-mission/${teachingMissionId}`,
    method: 'get'
  }).then(response => {
    // 后端返回404时会被request拦截器处理，这里主要处理成功的响应
    return response.data || response || null;
  }).catch(error => {
    // 如果是404错误，说明教学任务没有关联的总结，返回null
    if (error.response && error.response.status === 404) {
      return null;
    }
    // 其他错误继续抛出
    throw error;
  });
}

/**
 * 从教学任务创建课程教学总结
 * @param {number} teachingMissionId 教学任务ID
 * @returns {Promise} 返回创建的课程教学总结信息
 */
export function createKcjxzjFromTeachingMission(teachingMissionId) {
  return request({
    url: `/api/kcjxzj/from-teaching-mission/${teachingMissionId}`,
    method: 'post'
  });
}
